package com.wang.lotterysystem.service.manager.operator;

import com.wang.lotterysystem.dao.dataobject.activity.ActivityPrizeDO;
import com.wang.lotterysystem.dao.mapper.ActivityPrizeMapper;
import com.wang.lotterysystem.service.dto.activity.ActivityStatusConvertDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 转换奖品状态
 */
@Component
public class PrizeOperator extends AbstractActivityOperator{

    @Autowired
    private ActivityPrizeMapper activityPrizeMapper;

    /**
     * 奖品状态扭转的执行次序 --> 1
     */
    @Override
    public Integer sequence() {
        return 1;
    }

    /**
     * 判断是否需要进行状态转换
     * @param statusConvertDTO 状态转换参数
     * @return true-->需要 / false-->不需要
     */
    @Override
    public Boolean needConvert(ActivityStatusConvertDTO statusConvertDTO) {
        //如果状态转换种不存在相关参数,直接返回false
        //如果传入的参数中: 奖品id为空 或 活动目标状态id为空 --> 返回false
        if (statusConvertDTO.getPrizeId() == null ||
                statusConvertDTO.getActivityTargetStatus() == null){
            return false;
        }
        //根据活动id和奖品id从库中查询活动奖品信息
        ActivityPrizeDO activityPrizeDO = activityPrizeMapper.selectByActivityAndPrizeId(
                statusConvertDTO.getActivityId(),statusConvertDTO.getPrizeId()
        );

        if (activityPrizeDO == null) {
            //如果查到的结果为空 --> 返回false
            return false;
        }

        if (activityPrizeDO.getStatus().equals(statusConvertDTO.getPrizeTargetStatus().name())) {
            //检查奖品状态是否和传入参数中的状态(completed)一致
            //如果一致 --> 不进行扭转,返回false
            return false;
        }

        return true;
    }

    /**
     * 扭转状态
     * @param statusConvertDTO 状态扭转参数
     * @return 是否扭转成功
     */
    @Override
    public Boolean convertStatus(ActivityStatusConvertDTO statusConvertDTO) {
        //调用mapper层的updateStatus()方法进行状态扭转
        activityPrizeMapper.updateStatus(
                statusConvertDTO.getActivityId(),
                statusConvertDTO.getPrizeId(),
                statusConvertDTO.getActivityTargetStatus().name()
        );

        //返回扭转成功
        return true;
    }
}